Some time ago I wrote about the
the state of GRUB2
and a milestone on getting it boot my Apple PowerBook G4 without manual
intervention. More than a year later, GRUB2 has changed and improved a lot,
as the community keeps growing and patches and ideas are continously being
posted.
Some months and commits after my previous post, GRUB broke again on
Apple OpenFirmware and I'd get dropped to OF console, the amount of
commits since the last known working version and the current SVN was quite
big, and although I was able to narrow it to a few suspicious changes, I had
no time to bisect it properly, and sadly I had to go back to
yaboot
for a while.
But procrastinating sometimes helps, and when I should have been writing
and studying, on December I gave GRUB a new try on my laptop to see if a few
important changes to memory allocation would have changed anything. And it did!
So after fighting quite a few problems, I was able to
report partial success
to
grub-devel
.
Again, getting GRUB installed correctly was a bit challenging and needed
some hackery, due to incorrectly generated
device.map
, and the
linux module mysteriously not getting loaded. Luckily, Michel D nzer found out
that this was due to a bug in sort ordering in the HFS module, which broke
the lookup of files with underscores like
_linux.mod
, and for
which he posted a possible fix by taking Linux's table of character
ordering, which is a blob of hex values.
GRUB developers didn't seem too happy about applying the patch:
they argument that a blob like that should be well documented or written
in some other more readable way, and there's a possible problem with the mix
of Linux GPLv2 and GRUB GPLv3+ codebases, if a table of data like what Michel
posted is actually copyrightable. The discussion ended up dying and nothing
was done... until Pavel Roskin
picked it up
weeks later and posted a new patch, based on
hfsutils
GPLv2+
code, which addressed these issues. The new patch seems to have a few issues,
which makes it fail as before, but hopefully it'll be fixed soon.
Additionally, I wasn't able to boot using UUIDs as the search commands
fails to detect the correct boot device on my system (but not on Michel's), so
I had to disable that in
/etc/default/grub
.
To workaround the linux module loading bug while the patch is fixed,
I just added this ugly hack to
/etc/grub.d/09_local_prelinux
:
#! /bin/sh -e
# Work-around for bugs in the hfs module which makes the load of
# linux.mod fail.
cat << EOF
insmod (hd,3)/usr/lib/grub/powerpc-ieee1275/_linux.mod
insmod linux
EOF
This is enough to get the
initrd
and
linux
commands available. However, update-grub will still add
search
commands to your menu entries even if you disabled UUID support; I can't
understand why, but I know it breaks on my PowerBook due to some OF rarety.
Just removing the line from the menu entry will leave me with a working
config that boots without any manual editing at GRUB prompt.
The latest GRUB snapshot in Debian fixes the device.map issue, but adds
one last
issue:
update-grub will fail due to some gfxterm detection code, a workaround is
to replace an
exit 1
with
exit 0
when this happens
in
/etc/grub.d/00_header
.
On the weird architectures front, it's worth noting that this month
Dave Miller popped up on the list and started posting patches to fix the rotten
SPARC port, and I think it's safe to assume that it'll be on an usable state
really soon. Impressive!